perm filename SEG.SAI[8,ALS] blob sn#046195 filedate 1973-05-31 generic text, type T, neo UTF8
00010	BEGIN "SEGMENT"
00020	DEFINE ⊂="COMMENT";	⊂ 5/30/73;
00030	⊂ This program has been simplified for use in getting segmentation
00040	results for the workshop. All on line output has been removed. The
00050	progra handle utterances of almost any length altho there is only
00060	space for 100 segments of each of three classes;
00070	
00080	REQUIRE "COMSUB.HDR[SYS,ALS]" SOURCE_FILE;
00090	REQUIRE "BLOCKS.HDR[SYS,THO]" SOURCE_FILE;
00100	REQUIRE "SIG" LOAD_MODULE;
00101	
00103	
00110	EXTERNAL FORTRAN PROCEDURE SIG(REFERENCE INTEGER P);
00120	EXTERNAL STRING PROCEDURE INCHWL;
00130	EXTERNAL PROCEDURE SPOOL(STRING S; INTEGER IOCHAN,FLAGS);
00140	DEFINE BUFSIZ="1024",CNTSIZ="100";
00150	STRING TFILEI,FILEI,OPT1,MESS;
00160	INTERNAL INTEGER ARRAY DATBUF[0:BUFSIZ];
00170	INTEGER ARRAY LFILE[0:'177];
00180	INTEGER CHAN4,CHAN6,EOF,IEOF,FILEC;
00190	INTEGER BPT,SEGCNT,SEGTOT,H,I,J,K,L,Q;
00200	INTERNAL INTEGER M,N,P,RATE,FLAG,SEGC,INTOT,HINT,TFLAG,UPCNT;
00210	LABEL START,LABELA,LABELB,ZZZZ,FINISH;
00220	INTEGER ARRAY LEV1,LEV2,LEV3,LEV4,SEG1,SEG2,SEG3,SEG4[0:CNTSIZ];
00230	INTEGER CON1,CON2,CON3,CON4;
00240	
00250	DEFINE ⊂="COMMENT",CR="'15",LF="'12",FF="'14",TB="'11";
00251	DEFINE CRLF="CR&LF", CRLF0="CR&'177&'21"; ⊂ FOR CRLF W/O FORM FEED;
00252	DEFINE TTY="'14",DSK="'13",BDSKO="'12",DPY="'11",BDSKI="'10",TMP="'0";
00254	
00290	INTERNAL PROCEDURE LOOKIN(INTEGER CHAN; REFERENCE STRING FILENAME);
00300	BEGIN ⊂ REQUIRES SETBREAK(1,CR,LF,"IN");
00310	  BOOLEAN NF;
00320	  LOOKUP(CHAN,FILENAME,NF);
00330	  WHILE NF DO
00340	  BEGIN
00350	    OUTSTR(CR&LF&"Can't find "&FILENAME&". try [1,VIN],  File=");
00360	    FILENAME ← INCHWL ;
00370	    LOOKUP(CHAN,FILENAME,NF)
00380	  END;
00390	END "LOOKIN";
00400	
00410	PROCEDURE REPORT;
00420	BEGIN "REP"
00430	   STRING LAB;  INTEGER OUT,I,J,K,L;
00440	   IF TFLAG≠0 THEN BEGIN
00450		TFLAG←0;
00460	        FOR I←0 STEP 5 UNTIL TBLSIZ DO  BEGIN
00470	IF TABLET[I+1]=0 THEN DONE ELSE
00480	 IF (LDB(POINT(2,TABLET[I+2],12)))>0 THEN BEGIN "CT"
00490	 LAB←CVXSTR(TABLET[I+1]);   OUT←TABLET[I] ;
00500	 IF LDB(POINT(3,TABLET[I],20))-1 < LDB(POINT(3,TABLET[I+2],3)) THEN BEGIN
00510	   TABLET[I+2]←TABLET[I+2] LAND '770000000000;  DONE END;
00520	 IF EQU(LAB,"VOICED")∨EQU(LAB,"FRIC  ")∨EQU(LAB,"VOIFRI")
00530		∨EQU(LAB,"VS    ")∨EQU(LAB,"STOP  ")  THEN
00540	
00550	 BEGIN  LEV1[CON1]←TABLET[I+1];    SEG1[CON1]←OUT;
00560	  IF CON1<CNTSIZ THEN CON1←CON1+1 ELSE OUTSTR("Level 1 overflow"); END
00570	
00580	 ELSE IF
00590	EQU(LAB,"SCHWA ")∨EQU(LAB,"NASAL ")∨EQU(LAB,"GLIDE ")∨EQU(LAB,"VOWEL ")
00600	  THEN
00610	 BEGIN LEV2[CON2]←TABLET[I+1]; SEG2[CON2]←OUT;
00620	  IF CON2<CNTSIZ THEN CON2←CON2+1 ELSE OUTSTR("Level 2 overflow"); END
00630	
00640	 ELSE IF EQU(LAB,"S/T   ")∨EQU(LAB,"SH/K  ")∨EQU(LAB,"F/P   ") THEN
00650	 BEGIN  LEV3[CON3]←TABLET[I+1]; SEG3[CON3]←OUT;
00660	  IF CON3<CNTSIZ THEN CON3←CON3+1 ELSE OUTSTR("Level 3 overflow"); END
00670	
00680	 ELSE  BEGIN  LEV4[CON4]←TABLET[I+1]; SEG4[CON4]←OUT;
00690	  IF CON4<CNTSIZ THEN CON4←CON4+1 ELSE OUTSTR("Level 4 overflow"); END;
00700	TABLET[I+2]←TABLET[I+2] LAND '770000000000; END "CT"; END; END;
00710	END "REP";
00720	
00730	PROCEDURE ORDER;
00740	BEGIN "ORDER"
00750	INTEGER I,J,K,L;
00760	FOR I←0 STEP 1 UNTIL CON1-2 DO
00770	  FOR J←I+1 STEP 1 UNTIL CON1-1 DO
00780	    IF LDB(POINT(15,SEG1[J],17))<LDB(POINT(15,SEG1[I],17)) THEN
00790	      BEGIN K←LEV1[J]; LEV1[J]←LEV1[I]; LEV1[I]←K;
00800	            K←SEG1[J]; SEG1[J]←SEG1[I];SEG1[I]←K; END;
00810	FOR I←0 STEP 1 UNTIL CON2-2 DO
00820	  FOR J←I+1 STEP 1 UNTIL CON2-1 DO
00830	    IF LDB(POINT(15,SEG2[J],17))<LDB(POINT(15,SEG2[I],17)) THEN
00840	      BEGIN K←LEV2[J]; LEV2[J]←LEV2[I]; LEV2[I]←K;
00850	            K←SEG2[J]; SEG2[J]←SEG2[I]; SEG2[I]←K; END;
00860	FOR I←0 STEP 1 UNTIL CON3-2 DO
00870	  FOR J←I+1 STEP 1 UNTIL CON3-1 DO
00880	    IF LDB(POINT(15,SEG3[J],17))<LDB(POINT(15,SEG3[I],17)) THEN
00890	      BEGIN K←LEV3[J]; LEV3[J]←LEV3[I]; LEV3[I]←K;
00900	            K←SEG3[J]; SEG3[J]←SEG3[I]; SEG3[I]←K; END;
00920	FOR I←0 STEP 1 UNTIL CON4-2 DO
00930	  FOR J←I+1 STEP 1 UNTIL CON4-1 DO
00940	    IF LDB(POINT(15,SEG4[J],17))<LDB(POINT(15,SEG4[I],17)) THEN
00950	      BEGIN K←LEV4[J]; LEV4[J]←LEV4[I]; LEV4[I]←K;
00960	            K←SEG4[J]; SEG4[J]←SEG4[I]; SEG4[I]←K; END;
00970	END "ORDER";
00980	
00990	PROCEDURE CHART;
01000	BEGIN "CHART"
01010	INTEGER ARRAY LEVA,SEGA[0:800];
01020	INTEGER X,Y,Z,XX,YY,ZZ,LEVS,IMAX,P,Q,HSTART,HLONG,HEND,HFLAG;
01030	STRING STR1,HINT;
01040	
01050	
01060	I←0;			⊂ Rearrange order for printing;
01070	FOR J←0 STEP 1 UNTIL 100 DO
01080	 IF LEV1[J]≠0 THEN BEGIN
01090	  LEVA[I]←LEV1[J]; SEGA[I]←SEG1[J]; LEV1[J]←0;
01100	  FOR K←J+1 STEP 1 UNTIL 100 DO
01110	   IF LEV1[K]=LEVA[I] THEN BEGIN
01120	    I←I+1; LEVA[I]←LEV1[K]; SEGA[I]←SEG1[K]; LEV1[K]←0; END;
01130	  I←I+1; END;
01140	LEVA[I]←CVSIX("ZZZZ"); I←I+1; ⊂ To produce a space;
01150	
01160	FOR J←0 STEP 1 UNTIL 100 DO
01170	 IF LEV2[J]≠0 THEN BEGIN
01180	  LEVA[I]←LEV2[J]; SEGA[I]←SEG2[J]; LEV2[J]←0;
01190	  FOR K←J+1 STEP 1 UNTIL 100 DO
01200	   IF LEV2[K]=LEVA[I] THEN BEGIN
01210	    I←I+1; LEVA[I]←LEV2[K]; SEGA[I]←SEG2[K]; LEV2[K]←0; END;
01220	  I←I+1; END;
01230	
01240	FOR J←0 STEP 1 UNTIL 100 DO
01250	 IF LEV3[J]≠0 THEN BEGIN
01260	  LEVA[I]←LEV3[J]; SEGA[I]←SEG3[J]; LEV3[J]←0;
01270	  FOR K←J+1 STEP 1 UNTIL 100 DO
01280	   IF LEV3[K]=LEVA[I] THEN BEGIN
01290	    I←I+1; LEVA[I]←LEV3[K]; SEGA[I]←SEG3[K]; LEV3[K]←0; END;
01300	  I←I+1; END;
01310	
01320	FOR J←0 STEP 1 UNTIL 100 DO
01330	 IF LEV4[J]≠0 THEN BEGIN
01340	  LEVA[I]←LEV4[J]; SEGA[I]←SEG4[J]; LEV4[J]←0;
01350	  FOR K←J+1 STEP 1 UNTIL 100 DO
01360	   IF LEV4[K]=LEVA[I] THEN BEGIN
01370	    I←I+1; LEVA[I]←LEV4[K]; SEGA[I]←SEG4[K]; LEV4[K]←0; END;
01380	  I←I+1; END;
01390	LEVA[I]←CVSIX("YYYY"); I←I+1; IMAX←I;
01400	LEVA[I]←0;	⊂ Set stop;
01410	
01420	I←J←LEVS←0; N←100; 
01430	
01440	WHILE I≤400 DO BEGIN "ISTEP"
01450	IF ((N-100) MOD 30)=0 THEN BEGIN 
01460	OUT(CHAN6,FF&CR&FILEI&TB&TB&TB&TB&TB&TB&TB&DATIME&CRLF);
01470	OUT(CHAN6,TB&TB&TB&TB&" time in 1.024 secs."&CRLF); END;
01480	 SETFORMAT(1,0); OUT(CHAN6,CRLF&"     "&CVS(N)[2 TO 2]&"."&CVS(N)[3 TO 3]);
01490	 Q←(N-100)*8; P←20;
01500	 FOR K←1 STEP 1 UNTIL 10 DO BEGIN N←N+1;
01510	  OUT(CHAN6,"  .  "&CVS(N)[2 TO 2]&"."&CVS(N)[3 TO 3]); END;
01520	 LEVS←J←0;
01530	
01540	 WHILE J=0 DO BEGIN "JSTEP"
01550	  IF LEVA[I]=0 THEN DONE;
01560	  IF LEVA[I]=CVSIX("ZZZZ") THEN BEGIN 
01570	   OUT(CHAN6,CRLF);
01580	   IF LEVA[IMAX-1]≠CVSIX("ZZZZ") THEN IF LEVA[IMAX-1]≠CVSIX("YYYY") THEN
01590	   BEGIN 
01600	   LEVA[IMAX]←CVSIX("ZZZZ"); IMAX←IMAX+1; LEVA[IMAX]←0;END; END ELSE
01610	
01620	  IF LEVA[I]=CVSIX("YYYY") THEN BEGIN 
01630	   IF LEVA[IMAX-1]≠CVSIX("YYYY") THEN IF LEVA[IMAX-1]≠CVSIX("ZZZZ") THEN
01640	   BEGIN J←1; OUT(CHAN6,CRLF);
01650	    LEVA[IMAX]←CVSIX("YYYY"); IMAX←IMAX+1; LEVA[IMAX]←0; END; END
01660	
01670	  ELSE BEGIN "SAME-J"
01680	
01690	   IF LEVA[I]≠LEVS THEN BEGIN LEVS←LEVA[I];
01700	    STR1←(CVXSTR(LEVS)&"     ")[1 TO 6];
01710	    Z←0; END;
01720	
01730	   XX←(LDB(POINT(15,SEGA[I],17)));
01740	
01750	   IF XX≥160 THEN BEGIN
01760	    SEGA[IMAX]←(SEGA[I] LAND '700000777777)+((XX-160) LSH 18);
01770	    LEVA[IMAX]←LEVA[I]; IMAX←IMAX+1; LEVA[IMAX]←0; END
01780	   ELSE BEGIN
01790	
01800	   IF Z=0 THEN OUT(CHAN6,CRLF&STR1);
01810	   X←(XX+1)%2; K←X-Z;
01820	   FOR L←1 STEP 1 UNTIL K DO OUT(CHAN6," ");
01830	   YY←LDB(POINT(15,SEGA[I],35)); Y←(YY+1)%2; Z←X+Y;
01840	   IF Z>80 THEN BEGIN
01850	     LEVA[IMAX]←LEVA[I];
01860	     SEGA[IMAX]←(SEGA[I] LAND '700000700000)+Z-79;
01870	     Y←81-X;
01880	     IMAX←IMAX+1; LEVA[IMAX]←0; END;
01890	
01900	    FOR L←1 STEP 1 UNTIL Y DO
01910	     IF L=2 THEN BEGIN   
01913	       K←LDB(POINT(3,SEGA[I],2))+LDB(POINT(3,SEGA[I],20))-6;
01917	       OUT(CHAN6,CVS(K)) END
01920	     ELSE IF ((X+L-1) MOD 4)=0 THEN OUT(CHAN6,"+")
01930	     ELSE OUT(CHAN6,"-");
01940	    END;
01950	   IF J≠0 THEN DONE;
01960	   END "SAME-J";
01970	  I←I+1;
01980	  IF LEVA[I]=0 THEN DONE;
01990	  IF J≠0 THEN DONE;
02000	  END "JSTEP";
02010	
02015	IF LEVA[I]=0 THEN OUT(CHAN6,CRLF);
02020	OUT(CHAN6," Pony "); HEND←-1; P←21;
02030	WHILE Q≤(N-100)*8 DO BEGIN
02040	 WHILE Q>HEND DO BEGIN
02050	 IF LFILE[P]=0 THEN BEGIN HSTART←999; DONE; END;
02060	  HSTART←((LDB(POINT(12,LFILE[P],23)))+1)%2;
02062	  HLONG←((LDB(POINT(12,LFILE[P],35)))+1)%2;
02072	  IF HLONG<2 THEN HLONG←2;
02080	  HEND←HSTART+HLONG-1;
02090	 HINT←CVXSTR(LDB(POINT(12,LFILE[P],11)));
02100	HINT←HINT[5 TO 6];
02103	HFLAG←0;
02107	 P←P+1;
02110	 IF P≥127 THEN BEGIN OUTSTR("No HINTS"&CRLF); DONE END; END;
02120	IF P≥126 THEN DONE;
02150	
02155	  IF Q=HSTART-1 THEN  BEGIN OUT(CHAN6,HINT); HFLAG←1; Q←Q+2; END ELSE
02160	  IF Q<HSTART THEN BEGIN OUT(CHAN6," "); Q←Q+1; END ELSE
02170	  IF Q=HSTART THEN BEGIN OUT(CHAN6,HINT); HFLAG←1; Q←Q+2; END ELSE
02175	   IF HFLAG=0 THEN BEGIN OUT(CHAN6,HINT); Q←Q+2; HFLAG←1; END ELSE
02180	  IF Q>HSTART THEN BEGIN IF (Q MOD 4)=0 THEN OUT(CHAN6,"+") ELSE
02190	   OUT(CHAN6,"-"); Q←Q+1; END;
02195	
02200	 END; P←P-1; HEND←0; OUT(CHAN6,CRLF&LF);
02210	 IF LEVA[I]=0 THEN DONE;
02220	 END "ISTEP";
02230	
02231	OUT(CHAN6,"Notes:  The + symbols denote scale divisions only."&CRLF&TB&
02232	"The numbers on lines are confidence figures (unsigned, 0 to 8)."
02233	&CRLF&TB&
02234	"The position of pony data may not be exact because of scale compression."
02236	&crlf);
02240	END "CHART";
     

00010	FILEI←"SEG1.T0[77,THO]";UPCNT←3;OPT1←"N";FILEC←0; CHAN4←4;CHAN6←6;
00040	TABIN(INTOT);
00045	OUTSTR("Trained on: (CR or type)="); MESS←INCHWL;
00047	
00050	IF STRIN("Should previous data be saved as TELL.DOC? (Y or CR) ")≠"Y" THEN
00051	BEGIN    OPEN(CHAN6,"DSK",0,2,'10,0,0,EOF); ENTER(CHAN6,"TELL.DOC",0);
00055	 CLOSE(CHAN6); END ELSE
00060	IF STRIN("Should old TELL.DOC be spooled YorN = ")="Y" THEN
00070	BEGIN    OPEN(CHAN6,"DSK",0,2,'10,0,0,EOF); LOOKUP(CHAN6,"TELL.DOC",0);
00080	  RENAME(CHAN6,"TELL.OLD",0,EOF); CLOSE(CHAN6);
00095	  SPOOL("TELL.OLD",GETCHAN,1); END;
00096	
00122	
00130	⊂ **** MAIN ROUTINE STARTS HERE****;
00140	START: CLOSE(CHAN6);
00160	IF OPT1≠"Y" THEN
00170	IF (TFILEI←STRIN("Data file FFT/LPC ("&FILEI&")="))≠"" THEN FILEI←TFILEI
00180	ELSE OPT1←"Y";
00190	IF OPT1="Y" THEN BEGIN FILEC←FILEC+1;  SETFORMAT(1,0);
00210	  FILEI←"SEG"&CVS(FILEC)&".T0[77,THO]";
00220	  OUTSTR("Starting on "&FILEI); END;
00250	
00260	 FOR I←0 STEP 5 UNTIL TBLSIZ-5 DO IF TABLET[I+1]=0 THEN DONE
00270	  ELSE BEGIN TABLET[I+2]←TABLET[I+2] LAND '770000000000;
00280	  TABLET[I+3]←0;  END; ⊂ INITIALISE FOR EVENT;
00290	FOR I←0 STEP 1 UNTIL CNTSIZ DO BEGIN LEV1[I]←LEV2[I]←LEV3[I]←LEV4[I]←0;
00300	SEG1[I]←SEG2[I]←SEG3[I]←SEG4[I]←0; END;
00310	CON1←CON2←CON3←CON4←0; CLOSE(CHAN4); OPEN(CHAN4,"DSK",'10,10,0,0,0,EOF);
00340	LOOKIN(CHAN4,FILEI); EOF←SEGC←SEGCNT←0;
00360	ARRYIN(CHAN4,LFILE[0],'200);	⊂ Input header;
00370	SEGTOT←(LFILE[0])*3%128; RATE←LFILE[2];
00375	OUTSTR(TB&"Segtot="&CVS(SEGTOT)&TB&"Sampling rate="&CVS(LFILE[2])&CRLF);
00390	IF RATE=0 THEN RATE←CVD(STRIN("Sampling rate missing. Rate = "));
00400	
00420	OPEN(CHAN6,"DSK",0,2,'10,0,0,EOF); LOOKUP(CHAN6,"TELL.DOC",0);
00440	DEFINE UGETF="'073000000000"; START_CODE; UGETF	6,I; END;
00480	ENTER(CHAN6,"TELL.DOC",0); USETO(CHAN6,I);
00510	OUT(CHAN6,TB&TB&TB&"  A.I. Laboratory"&
00515	  TB&CRLF&TB&TB&TB&"Stanford University"
00520	 &CRLF&LF&TB&"Segmentation data for ARPA Speech Segmentation Workshop"&CRLF);
00530	OUT(CHAN6,TB&"  Pony data after SCRL as spotted by R.Thosar or N.Miller"&crlf);
00540	OUT(CHAN6,CRLF&TB&"Data file "&FILEI&"  "&TB&TB&DATIME&CRLF&TB);
00547	FOR I←10 STEP 1 UNTIL 20 DO OUT(CHAN6,CVXSTR(LFILE[I]));
00558	OUT(CHAN6,CRLF);
00561	IF MESS≠"" THEN OUT(CHAN6,TB&"Trained on: "&MESS&CRLF);
00570	SETFORMAT(5,0);
00590	
00600	LABELA: ⊂ Put all outputs into the off state;
00610	FOR I←0 STEP 5 UNTIL TBLSIZ-5 DO
00620	 IF TABLET[I+1]≠0 THEN TABLET[I]←'777777777777 ELSE DONE;
00630	CON1←CON2←CON3←CON4←0;  HINT←H←0; TABLES[2]←HLIST[0];
00640	
00650	WHILE EOF=0 DO BEGIN "DATAIN"
00660	  ARRYIN(CHAN4,DATBUF[0],BUFSIZ); ⊂ Get data;
00670	  BPT←POINT(6,DATBUF[0],-1);
00680	  
00690	  FOR Q←1 STEP 1 UNTIL BUFSIZ%4 DO BEGIN  
00700	    SEGC←SEGC+1;
00710	    IF SEGC>SEGTOT THEN DONE;
00720	    FOR P←0 STEP 1 UNTIL 23 DO INDAT[P]←ILDB(BPT);
00730	LABELB: SIG(P); REPORT;
00750	  END;
00760	IF SEGC>SEGTOT THEN DONE;
00770	END "DATAIN"; CLOSE(CHAN4);
00780	
00790	   FOR I←0 STEP 1 UNTIL INSIZ-1 DO  INDAT[I]←0;
00800	   FOR I←0 STEP 1 UNTIL 4 DO BEGIN SEGC←SEGC+1;  SIG(P); REPORT; END;
00830	
00840	⊂ **** Off line listing of counter outputs ****;
00850	ORDER;
00860	OUT(CHAN6,CRLF&TB&
00870	"In CMU units    SEG."&TB&"    Levels"&TB&" In units of 6.4 ms.");
00880	OUT(CHAN6,CRLF&TB&"Begin"&TB&"  End  "
00890	         &TB&"Label"&TB&"   Ave."&TB&"Max.  "&TB&"Begin"&TB&"  End"
00900		&TB&"Count"&CRLF);
00910	OUT(CHAN6,CRLF&TB&
00920	 "First level [voiced, fric., voiced-stop, stop]"
00930	&CRLF);
00940	FOR I←0 STEP 1 UNTIL CON1-1 DO BEGIN
00950	 J←LDB(POINT(15,SEG1[I],17)); K←LDB(POINT(15,SEG1[I],35)); L←J+K-1;
00970	OUT(CHAN6,CRLF&TB&CVS(J LSH 6)&TB&CVS((L) LSH 6)&TB
00980	 &CVXSTR(LEV1[I])&TB&CVS(LDB(POINT(3,SEG1[I],2)))
00990	 &CVS(LDB(POINT(3,SEG1[I],20)))&TB&CVS(J)&TB&CVS(L)&TB&CVS(K)); END;
01010	OUT(CHAN6,CRLF&LF&TB& "Voiced [vowel, glide, nasal]"&CRLF);
01020	
01030	 FOR I←0 STEP 1 UNTIL CON2-1 DO BEGIN
01040	 J←LDB(POINT(15,SEG2[I],17)); K←LDB(POINT(15,SEG2[I],35)); L←J+K-1;
01060	OUT(CHAN6,CRLF&TB&CVS(J LSH 6)&TB&CVS(L LSH 6)&TB
01070	 &CVXSTR(LEV2[I])&TB&CVS(LDB(POINT(3,SEG2[I],2)))
01080	 &CVS(LDB(POINT(3,SEG2[I],20)))&TB&CVS(J)&TB&CVS(L)&TB&CVS(K)); END;
01110	   OUT(CHAN6,CRLF&LF&TB&"Fricatives [S/T, SH/K, F/P]"&CRLF);
01120	
01130	 FOR I←0 STEP 1 UNTIL CON3-1 DO BEGIN
01140	  J←LDB(POINT(15,SEG3[I],17)); K←LDB(POINT(15,SEG3[I],35)); L←J+K-1;
01160	OUT(CHAN6,CRLF&TB&CVS(J LSH 6)&TB&CVS(L LSH 6)
01170	  &TB&CVXSTR(LEV3[I])&TB&CVS(LDB(POINT(3,SEG3[I],2)))&
01180	  CVS(LDB(POINT(3,SEG3[I],20)))&TB&CVS(J)&TB&CVS(L)&TB&CVS(K)); END;
01190	   OUT(CHAN6,CRLF&LF&TB&"Vowels [front, mid, back]"&CRLF);
01200	 FOR I←0 STEP 1 UNTIL CON4-1 DO BEGIN
01210	  J←LDB(POINT(15,SEG4[I],17)); K←LDB(POINT(15,SEG4[I],35));   L←J+K-1;
01230	OUT(CHAN6,CRLF&TB&CVS(J LSH 6)&TB&CVS(L LSH 6)
01240	  &TB&CVXSTR(LEV4[I])&TB&CVS(LDB(POINT(3,SEG4[I],2)))&
01250	 CVS(LDB(POINT(3,SEG4[I],20)))&TB&CVS(J)&TB&CVS(L)&TB&CVS(K)); END;
01280	 OUT(CHAN6,CRLF);
01282	
01285	 CHART; OUT(CHAN6,FF);  CLOSE(CHAN6);
01290	
01340	GO TO START;
01360	FINISH:
01370	END "SEGMENT";